package com.huawei.hwclouds.lubanops.demo.common.biz;

import java.util.Collections;
import java.util.List;

/**
 * Description:
 *
 * @author f00384042
 * @date 13-6-5
 */
public abstract class AbstractServiceBase<D, P extends AbstractPageQueryRequest> {

    public abstract Mapper<D, P> getMapper();

    public void create(D theDO) {
        getMapper().create(theDO);
    }

    public Integer update(D d) {
        return getMapper().update(d);
    }

    /**
     * 分页查询 <br>
     *
     * @param param
     * @return
     * @author y00438022
     * @since 2020年3月3日
     */
    public PageList<D> pageQuery(P param) {
        PageList<D> pageList = new PageList<D>();
        pageList.setParam(param);
        List<D> dlist = getMapper().pageQuery(param);
        if (dlist == null) {
            pageList.setDataList(Collections.emptyList());
        } else {
            pageList.setDataList(dlist);
        }

        if (param.isCountNeeded()) {
            Integer count = getMapper().count(param);
            pageList.setTotalCount(count);
            int c = count / param.getPageSize();
            int r = count % param.getPageSize();
            if (r == 0) {
                pageList.setPageCount(c);
            } else {
                pageList.setPageCount(c + 1);
            }

        }
        return pageList;
    }

    /**
     * @param param
     * @return
     */
    public Integer count(P param) {
        return getMapper().count(param);
    }

    /**
     * 根据主键进行查找 <br>
     *
     * @param id
     * @return
     * @author y00438022
     * @since 2020年3月3日
     */
    public D retrieveById(Integer id) {
        return getMapper().retrieveById(id);
    }

    /**
     * 根据主键进行查找 <br>
     *
     * @param id
     * @return
     * @author y00438022
     * @since 2020年3月3日
     */
    public D retrieveById(Long id) {
        return getMapper().retrieveById(id);
    }

    /**
     * 根据主键删除<br>
     *
     * @param id
     * @return
     * @author y00438022
     * @since 2020年3月3日
     */
    public int delete(Integer id) {
        return getMapper().delete(id);
    }

    /**
     * 根据主键删除<br>
     *
     * @param id
     * @return
     * @author y00438022
     * @since 2020年3月3日
     */
    public int delete(Long id) {
        return getMapper().delete(id);
    }

    /**
     * 查询系统所有记录
     *
     * @param id
     * @return
     */
    public List<D> findAll() {
        List<D> list = getMapper().findAll();
        if (list != null) {
            return list;
        } else {
            return Collections.emptyList();
        }
    }

}
